/**
 * 表单验证插
 * lizhihao
 */
const re = {
    isEmpty: function (value, errmsg) {
        if (value === '') {
            return errmsg;
        }
    },
    minLength: function (value, length, errmsg) {
        if (value.length < length) {
            return errmsg;
        }
    },
    isMobile: function (value, errmsg) {
        if (!/(^1[3-8][0-9]{9}$)/.test(value)) {
            return errmsg;
        }
    },
    //身份证号码
    isIdCardNo: function (value, errmsg) {
        let reg = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        if (!reg.test(value)) {
            return errmsg;
        }
    },
    //数字校验，包含小数点
    isFloatNum: function (value, errmsg) {
        let reg = /^\d+(?=\.{0,1}\d+$|$)/
        if (!reg.test(value)) {
            return errmsg;
        }
    },
    //中文
    isChinese: function (value, errmsg) {
        let reg = /^[\u4e00-\u9fa5]{1,}$/;
        if (!reg.test(value)) {
            return errmsg;
        }
    },
    //是否为字母和数字的组合
    isCharNum: function (value, errmsg) {
        let reg = /^[a-zA-Z0-9]*$/;
        if (!reg.test(value)) {
            return errmsg;
        }
    },
    //正整数
    isInt: function (value, errmsg) {
        let reg = /^0$|^[1-9]\d*$/;
        if (!reg.test(value)) {
            return errmsg;
        }
    },
    //邮箱
    isMail: function (value, errmsg) {
        let reg = /^[a-zA-Z0-9_-]+@[a-zA-Z0-9_-]+(\.[a-zA-Z]+)+$/;
        if (!reg.test(value)) {
            return errmsg;
        }
    }
}
class validForm {
    constructor() {
        //保存验证规则
        this.cache = [];
    }
    /**
     * 添加验证规则
     * 
     * @param {*} value 
     * @param {Array} rules 
     */
    add(value, rules) {
        let self = this;
        for (let i = 0, rule; rule = rules[i++];) {
            let strateAry = rule.rule.split(':');
            let errMsg = rule.msg;
            self.cache.push(function () {
                let strategy = strateAry.shift();
                strateAry.unshift(value);
                strateAry.push(errMsg);
                console.log('strategy=' + strategy)
                return re[strategy].apply(null, strateAry)
            })
        }
    }
    start() {
        for (let i = 0, fn; fn = this.cache[i++];) {
            let msg = fn();
            if (msg) {
                return msg;
            }
        }
    }
}
module.exports = validForm;